Nico Rieck: this patch series fixes visibility issues on Windows as explained in <http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-August/031214.html>. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@188192 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/valarray b/include/valarray index 71c8a74..d4e9015 100644 --- a/include/valarray +++ b/include/valarray 
@@ -354,9 +354,9 @@    _LIBCPP_BEGIN_NAMESPACE_STD   -template<class _Tp> class _LIBCPP_TYPE_VIS valarray; +template<class _Tp> class _LIBCPP_TYPE_VIS_ONLY valarray;   -class _LIBCPP_TYPE_VIS slice +class _LIBCPP_TYPE_VIS_ONLY slice  {  size_t __start_;  size_t __size_; @@ -381,11 +381,11 @@  _LIBCPP_INLINE_VISIBILITY size_t stride() const {return __stride_;}  };   -template <class _Tp> class _LIBCPP_TYPE_VIS slice_array; +template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY slice_array;  class _LIBCPP_TYPE_VIS gslice; -template <class _Tp> class _LIBCPP_TYPE_VIS gslice_array; -template <class _Tp> class _LIBCPP_TYPE_VIS mask_array; -template <class _Tp> class _LIBCPP_TYPE_VIS indirect_array; +template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY gslice_array; +template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY mask_array; +template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY indirect_array;    template <class _Tp>  _LIBCPP_INLINE_VISIBILITY @@ -671,7 +671,7 @@  _LIBCPP_INLINE_VISIBILITY  size_t size() const {return __size_;}   - template <class> friend class _LIBCPP_TYPE_VIS valarray; + template <class> friend class _LIBCPP_TYPE_VIS_ONLY valarray;  };    template <class _ValExpr> @@ -786,7 +786,7 @@  struct __is_val_expr<valarray<_Tp> > : true_type {};    template<class _Tp> -class _LIBCPP_TYPE_VIS valarray +class _LIBCPP_TYPE_VIS_ONLY valarray  {  public:  typedef _Tp value_type; @@ -976,12 +976,12 @@  void resize(size_t __n, value_type __x = value_type());    private: - template <class> friend class _LIBCPP_TYPE_VIS valarray; - template <class> friend class _LIBCPP_TYPE_VIS slice_array; - template <class> friend class _LIBCPP_TYPE_VIS gslice_array; - template <class> friend class _LIBCPP_TYPE_VIS mask_array; + template <class> friend class _LIBCPP_TYPE_VIS_ONLY valarray; + template <class> friend class _LIBCPP_TYPE_VIS_ONLY slice_array; + template <class> friend class _LIBCPP_TYPE_VIS_ONLY gslice_array; + template <class> friend class _LIBCPP_TYPE_VIS_ONLY mask_array;  template <class> friend class __mask_expr; - template <class> friend class _LIBCPP_TYPE_VIS indirect_array; + template <class> friend class _LIBCPP_TYPE_VIS_ONLY indirect_array;  template <class> friend class __indirect_expr;  template <class> friend class __val_expr;   @@ -1006,6 +1006,10 @@  end(const valarray<_Up>& __v);  };   +_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::valarray(size_t)) +_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::~valarray()) +_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS void valarray<size_t>::resize(size_t, size_t)) +  template <class _Op, class _Tp>  struct _UnaryOp<_Op, valarray<_Tp> >  { @@ -1091,7 +1095,7 @@  // slice_array    template <class _Tp> -class _LIBCPP_TYPE_VIS slice_array +class _LIBCPP_TYPE_VIS_ONLY slice_array  {  public:  typedef _Tp value_type; @@ -1461,7 +1465,7 @@  // gslice_array    template <class _Tp> -class _LIBCPP_TYPE_VIS gslice_array +class _LIBCPP_TYPE_VIS_ONLY gslice_array  {  public:  typedef _Tp value_type; @@ -1790,7 +1794,7 @@  // mask_array    template <class _Tp> -class _LIBCPP_TYPE_VIS mask_array +class _LIBCPP_TYPE_VIS_ONLY mask_array  {  public:  typedef _Tp value_type; @@ -2134,7 +2138,7 @@  // indirect_array    template <class _Tp> -class _LIBCPP_TYPE_VIS indirect_array +class _LIBCPP_TYPE_VIS_ONLY indirect_array  {  public:  typedef _Tp value_type; @@ -2485,7 +2489,7 @@  _LIBCPP_INLINE_VISIBILITY  size_t size() const {return __1d_.size();}   - template <class> friend class _LIBCPP_TYPE_VIS valarray; + template <class> friend class _LIBCPP_TYPE_VIS_ONLY valarray;  };    template<class _ValExpr> @@ -4770,10 +4774,6 @@  return __v.__end_;  }   -_LIBCPP_EXTERN_TEMPLATE(valarray<size_t>::valarray(size_t)) -_LIBCPP_EXTERN_TEMPLATE(valarray<size_t>::~valarray()) -_LIBCPP_EXTERN_TEMPLATE(void valarray<size_t>::resize(size_t, size_t)) -  _LIBCPP_END_NAMESPACE_STD    #endif // _LIBCPP_VALARRAY